home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- import array
- from time import strftime, gmtime
- from struct import *
- from impacket import ImpactPacket
- import dcerpc
- import ndrutils
- MSRPC_UUID_SAMR = 'xW4\x124\x12\xcd\xab\xef\x00\x01#Eg\x89\xac\x01\x00\x00\x00'
- OP_NUM_CREATE_USER_IN_DOMAIN = 12
- OP_NUM_ENUM_USERS_IN_DOMAIN = 13
- OP_NUM_CREATE_ALIAS_IN_DOMAIN = 14
-
- def display_time(filetime_high, filetime_low, minutes_utc = 0):
- d = filetime_high * 4.0 * 1.0 * (1 << 30)
- d += filetime_low
- d *= 9.9999999999999995e-08
- d -= 369.0 * 365.25 * 24 * 60 * 60 - (3.0 * 24 * 60 * 60 + 6.0 * 60 * 60)
- if minutes_utc == 0:
- r = (strftime('%a, %d %b %Y %H:%M:%S', gmtime(d)), minutes_utc / 60)[0]
- else:
- r = '%s GMT %d ' % (strftime('%a, %d %b %Y %H:%M:%S', gmtime(d)), minutes_utc / 60)
- return r
-
-
- class MSRPCUserInfo:
- ITEMS = {
- 'Account Name': 0,
- 'Full Name': 1,
- 'Home': 2,
- 'Home Drive': 3,
- 'Script': 4,
- 'Profile': 5,
- 'Description': 6,
- 'Workstations': 7,
- 'Comment': 8,
- 'Parameters': 9,
- 'Logon hours': 10 }
-
- def __init__(self, data = None):
- self._logon_time_low = 0
- self._logon_time_high = 0
- self._logoff_time_low = 0
- self._logoff_time_high = 0
- self._kickoff_time_low = 0
- self._kickoff_time_high = 0
- self._pwd_last_set_low = 0
- self._pwd_last_set_high = 0
- self._pwd_can_change_low = 0
- self._pwd_can_change_high = 0
- self._pwd_must_change_low = 0
- self._pwd_must_change_high = 0
- self._items = []
- self._rid = 0
- self._group = 0
- self._acct_ctrl = 0
- self._bad_pwd_count = 0
- self._logon_count = 0
- self._country = 0
- self._codepage = 0
- self._nt_pwd_set = 0
- self._lm_pwd_set = 0
- if data:
- self.set_header(data)
-
-
-
- def set_header(self, data):
- index = 8
- (self._logon_time_low, self._logon_time_high, self._logoff_time_low, self._logoff_time_high, self._kickoff_time_low, self._kickoff_time_high, self._pwd_last_set_low, self._pwd_last_set_high, self._pwd_can_change_low, self._pwd_can_change_high, self._pwd_must_change_low, self._pwd_must_change_high) = unpack('<LLLLLLLLLLLL', data[index:index + 48])
- index += 48
- for i in range(0, len(MSRPCUserInfo.ITEMS) - 1):
- (length, size, id) = unpack('<HHL', data[index:index + 8])
- self._items.append(dcerpc.MSRPCArray(length, size, id))
- index += 8
-
- index += 24
- item_count = unpack('<L', data[index:index + 4])[0]
- index += 4 + (item_count + 1) * 4
- (self._rid, self._group, self._acct_ctr, _) = unpack('<LLLL', data[index:index + 16])
- index += 16
- (logon_divisions, _, id) = unpack('<HHL', data[index:index + 8])
- self._items.append(dcerpc.MSRPCArray(logon_divisions, _, id))
- index += 8
- (self._bad_pwd_count, self._logon_count, self._country, self._codepage) = unpack('<HHHH', data[index:index + 8])
- index += 8
- (self._nt_pwd_set, self._lm_pwd_set, _, _) = unpack('<BBBB', data[index:index + 4])
- index += 4
- for item in self._items[:-1]:
- if 0 == item.get_size():
- continue
-
- (max_len, offset, curlen) = unpack('<LLL', data[index:index + 12])
- index += 12
- item.set_name(unicode(data[index:index + 2 * curlen], 'utf-16le'))
- item.set_max_len(max_len)
- item.set_offset(offset)
- item.set_length2(curlen)
- index += 2 * curlen
- if curlen & 1:
- index += 2
- continue
-
- item = self._items[10]
- (max_len, offset, curlen) = unpack('<LLL', data[index:index + 12])
- index += 12
- item.set_name('Unlimited')
- for b in data[index:index + curlen]:
- if 255 != ord(b):
- item.set_name('Unknown')
- continue
-
-
-
- def get_num_items(self):
- return len(self._items)
-
-
- def get_items(self):
- return self._items
-
-
- def get_logon_time(self):
- return display_time(self._logon_time_high, self._logon_time_low)
-
-
- def get_logoff_time(self):
- return display_time(self._logoff_time_high, self._logoff_time_low)
-
-
- def get_kickoff_time(self):
- return display_time(self._kickoff_time_high, self._kickoff_time_low)
-
-
- def get_pwd_last_set(self):
- return display_time(self._pwd_last_set_high, self._pwd_last_set_low)
-
-
- def get_pwd_can_change(self):
- return display_time(self._pwd_can_change_high, self._pwd_can_change_low)
-
-
- def get_group_id(self):
- return self._group
-
-
- def get_bad_pwd_count(self):
- return self._bad_pwd_count
-
-
- def get_logon_count(self):
- return self._logon_count
-
-
- def get_pwd_must_change(self):
- if self._pwd_must_change_low == 0xFFFFFFFFL:
- return 'Infinity'
- else:
- return display_time(self._pwd_must_change_high, self._pwd_must_change_low)
-
-
- def is_enabled(self):
- return not (self._acct_ctr & 1)
-
-
- def print_friendly(self):
- print 'Last Logon: ' + display_time(self._logon_time_high, self._logon_time_low)
- print 'Last Logoff: ' + display_time(self._logoff_time_high, self._logoff_time_low)
- print 'Kickoff Time: ' + display_time(self._kickoff_time_high, self._kickoff_time_low)
- print 'PWD Last Set: ' + display_time(self._pwd_last_set_high, self._pwd_last_set_low)
- print 'PWD Can Change: ' + display_time(self._pwd_can_change_high, self._pwd_can_change_low)
- print 'Group id: %d' % self._group
- print 'Bad pwd count: %d' % self._bad_pwd_count
- print 'Logon count: %d' % self._logon_count
- if self._pwd_must_change_low == 0xFFFFFFFFL:
- print 'PWD Must Change: Infinity'
- else:
- print 'PWD Must Change: ' + display_time(self._pwd_must_change_high, self._pwd_must_change_low)
- for i in MSRPCUserInfo.ITEMS.keys():
- print i + ': ' + self._items[MSRPCUserInfo.ITEMS[i]].get_name()
-
- print
-
-
-
- class SAMRConnectHeader(ImpactPacket.Header):
- OP_NUM = 57
- __SIZE = 4
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRConnectHeader._SAMRConnectHeader__SIZE)
- self._SAMRConnectHeader__sptr = ndrutils.NDRPointer()
- self.set_server('')
- self.set_access_mask(33554432)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_server(self):
- return ndrutils.NDRPointer(self.get_bytes()[:-4].tostring(), ndrutils.NDRString)
-
-
- def set_server(self, name):
- ss = ndrutils.NDRString()
- ss.set_string(name)
- self._SAMRConnectHeader__sptr.set_pointer(ss)
- data = self._SAMRConnectHeader__sptr.rawData()
- self.get_bytes()[:-4] = array.array('B', data)
-
-
- def get_access_mask(self):
- return self.get_long(-4, '<')
-
-
- def set_access_mask(self, mask):
- self.set_long(-4, mask, '<')
-
-
- def get_header_size(self):
- var_size = len(self.get_bytes()) - SAMRConnectHeader._SAMRConnectHeader__SIZE
- if not var_size > 0:
- raise AssertionError
- return SAMRConnectHeader._SAMRConnectHeader__SIZE + var_size
-
-
-
- class SAMRRespConnectHeader(ImpactPacket.Header):
- __SIZE = 24
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespConnectHeader._SAMRRespConnectHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tostring()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_return_code(self):
- return self.get_long(20, '<')
-
-
- def set_return_code(self, code):
- self.set_long(20, code, '<')
-
-
- def get_header_size(self):
- return SAMRRespConnectHeader._SAMRRespConnectHeader__SIZE
-
-
-
- class SAMREnumDomainsHeader(ImpactPacket.Header):
- OP_NUM = 6
- __SIZE = 28
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMREnumDomainsHeader._SAMREnumDomainsHeader__SIZE)
- self.set_pref_max_size(8192)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_resume_handle(self):
- return self.get_long(20, '<')
-
-
- def set_resume_handle(self, handle):
- self.set_long(20, handle, '<')
-
-
- def get_pref_max_size(self):
- return self.get_long(24, '<')
-
-
- def set_pref_max_size(self, size):
- self.set_long(24, size, '<')
-
-
- def get_header_size(self):
- return SAMREnumDomainsHeader._SAMREnumDomainsHeader__SIZE
-
-
-
- class SAMRRespEnumDomainHeader(ImpactPacket.Header):
- __SIZE = 12
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespEnumDomainHeader._SAMRRespEnumDomainHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_resume_handle(self):
- return self.get_long(0, '<')
-
-
- def set_resume_handle(self, handle):
- self.set_long(0, handle, '<')
-
-
- def get_domains(self):
- return dcerpc.MSRPCNameArray(self.get_bytes()[4:-8].tostring())
-
-
- def set_domains(self, domains):
- if not isinstance(domains, dcerpc.MSRPCNameArray):
- raise AssertionError
- self.get_bytes()[4:-8] = array.array('B', domains.rawData())
-
-
- def get_entries_num(self):
- return self.get_long(-8, '<')
-
-
- def set_entries_num(self, num):
- self.set_long(-8, num, '<')
-
-
- def get_return_code(self):
- return self.get_long(-4, '<')
-
-
- def set_return_code(self, code):
- self.set_long(-4, code, '<')
-
-
- def get_header_size(self):
- var_size = len(self.get_bytes()) - SAMRRespEnumDomainHeader._SAMRRespEnumDomainHeader__SIZE
- if not var_size > 0:
- raise AssertionError
- return SAMRRespEnumDomainHeader._SAMRRespEnumDomainHeader__SIZE + var_size
-
-
-
- class SAMRLookupDomainHeader(ImpactPacket.Header):
- OP_NUM = 5
- __SIZE = 20
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRLookupDomainHeader._SAMRLookupDomainHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_domain(self):
- return dcerpc.MSRPCArray(self.get_bytes().tolist()[20:])
-
-
- def set_domain(self, domain):
- if not isinstance(domain, dcerpc.MSRPCArray):
- raise AssertionError
- self.get_bytes()[20:] = array.array('B', domain.rawData())
-
-
- def get_header_size(self):
- var_size = len(self.get_bytes()) - SAMRLookupDomainHeader._SAMRLookupDomainHeader__SIZE
- if not var_size > 0:
- raise AssertionError
- return SAMRLookupDomainHeader._SAMRLookupDomainHeader__SIZE + var_size
-
-
-
- class SAMRRespLookupDomainHeader(ImpactPacket.Header):
- __SIZE = 36
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespLookupDomainHeader._SAMRRespLookupDomainHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_domain_sid(self):
- return self.get_bytes().tolist()[4:4 + 28]
-
-
- def set_domain_sid(self, sid):
- if not 28 == len(sid):
- raise AssertionError
- self.get_bytes()[4:4 + 28] = array.array('B', sid)
-
-
- def get_return_code(self):
- return self.get_long(32, '<')
-
-
- def set_return_code(self, code):
- self.set_long(32, code, '<')
-
-
- def get_header_size(self):
- return SAMRRespLookupDomainHeader._SAMRRespLookupDomainHeader__SIZE
-
-
-
- class SAMROpenDomainHeader(ImpactPacket.Header):
- OP_NUM = 7
- __SIZE = 52
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMROpenDomainHeader._SAMROpenDomainHeader__SIZE)
- self.set_access_mask(772)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_access_mask(self):
- return self.get_long(20, '<')
-
-
- def set_access_mask(self, mask):
- self.set_long(20, mask, '<')
-
-
- def get_domain_sid(self):
- return self.get_bytes().tolist()[24:24 + 28]
-
-
- def set_domain_sid(self, sid):
- if not 28 == len(sid):
- raise AssertionError
- self.get_bytes()[24:24 + 28] = array.array('B', sid)
-
-
- def get_header_size(self):
- return SAMROpenDomainHeader._SAMROpenDomainHeader__SIZE
-
-
-
- class SAMRRespOpenDomainHeader(ImpactPacket.Header):
- __SIZE = 24
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespOpenDomainHeader._SAMRRespOpenDomainHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_return_code(self):
- return self.get_long(20, '<')
-
-
- def set_return_code(self, code):
- self.set_long(20, code, '<')
-
-
- def get_header_size(self):
- return SAMRRespOpenDomainHeader._SAMRRespOpenDomainHeader__SIZE
-
-
-
- class SAMREnumDomainUsersHeader(ImpactPacket.Header):
- OP_NUM = OP_NUM_ENUM_USERS_IN_DOMAIN
- __SIZE = 32
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMREnumDomainUsersHeader._SAMREnumDomainUsersHeader__SIZE)
- self.set_pref_max_size(3275)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_resume_handle(self):
- return self.get_long(20, '<')
-
-
- def set_resume_handle(self, handle):
- self.set_long(20, handle, '<')
-
-
- def get_account_control(self):
- return self.get_long(24, '<')
-
-
- def set_account_control(self, mask):
- self.set_long(24, mask, '<')
-
-
- def get_pref_max_size(self):
- return self.get_long(28, '<')
-
-
- def set_pref_max_size(self, size):
- self.set_long(28, size, '<')
-
-
- def get_header_size(self):
- return SAMREnumDomainUsersHeader._SAMREnumDomainUsersHeader__SIZE
-
-
-
- class SAMRRespEnumDomainUsersHeader(ImpactPacket.Header):
- __SIZE = 16
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespEnumDomainUsersHeader._SAMRRespEnumDomainUsersHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_resume_handle(self):
- return self.get_long(0, '<')
-
-
- def set_resume_handle(self, handle):
- self.set_long(0, handle, '<')
-
-
- def get_users(self):
- return dcerpc.MSRPCNameArray(self.get_bytes()[4:-8].tostring())
-
-
- def set_users(self, users):
- if not isinstance(users, dcerpc.MSRPCNameArray):
- raise AssertionError
- self.get_bytes()[4:-8] = array.array('B', users.rawData())
-
-
- def get_entries_num(self):
- return self.get_long(-8, '<')
-
-
- def set_entries_num(self, num):
- self.set_long(-8, num, '<')
-
-
- def get_return_code(self):
- return self.get_long(-4, '<')
-
-
- def set_return_code(self, code):
- self.set_long(-4, code, '<')
-
-
- def get_header_size(self):
- var_size = len(self.get_bytes()) - SAMRRespEnumDomainUsersHeader._SAMRRespEnumDomainUsersHeader__SIZE
- if not var_size > 0:
- raise AssertionError
- return SAMRRespEnumDomainUsersHeader._SAMRRespEnumDomainUsersHeader__SIZE + var_size
-
-
-
- class SAMROpenUserHeader(ImpactPacket.Header):
- OP_NUM = 34
- __SIZE = 28
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMROpenUserHeader._SAMROpenUserHeader__SIZE)
- self.set_access_mask(131355)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_access_mask(self):
- return self.get_long(20, '<')
-
-
- def set_access_mask(self, mask):
- self.set_long(20, mask, '<')
-
-
- def get_rid(self):
- return self.get_long(24, '<')
-
-
- def set_rid(self, id):
- self.set_long(24, id, '<')
-
-
- def get_header_size(self):
- return SAMROpenUserHeader._SAMROpenUserHeader__SIZE
-
-
-
- class SAMRRespOpenUserHeader(ImpactPacket.Header):
- __SIZE = 24
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespOpenUserHeader._SAMRRespOpenUserHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_return_code(self):
- return self.get_long(20, '<')
-
-
- def set_return_code(self, code):
- self.set_long(20, code, '<')
-
-
- def get_header_size(self):
- return SAMRRespOpenUserHeader._SAMRRespOpenUserHeader__SIZE
-
-
-
- class SAMRQueryUserInfoHeader(ImpactPacket.Header):
- OP_NUM = 36
- __SIZE = 22
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRQueryUserInfoHeader._SAMRQueryUserInfoHeader__SIZE)
- self.set_level(21)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_level(self):
- return self.get_word(20, '<')
-
-
- def set_level(self, level):
- self.set_word(20, level, '<')
-
-
- def get_header_size(self):
- return SAMRQueryUserInfoHeader._SAMRQueryUserInfoHeader__SIZE
-
-
-
- class SAMRRespQueryUserInfoHeader(ImpactPacket.Header):
- __SIZE = 4
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespQueryUserInfoHeader._SAMRRespQueryUserInfoHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_user_info(self):
- return MSRPCUserInfo(self.get_bytes()[:-4].tostring())
-
-
- def set_user_info(self, info):
- if not isinstance(info, MSRPCUserInfo):
- raise AssertionError
- self.get_bytes()[:-4] = array.array('B', info.rawData())
-
-
- def get_return_code(self):
- return self.get_long(-4, '<')
-
-
- def set_return_code(self, code):
- self.set_long(-4, code, '<')
-
-
- def get_header_size(self):
- var_size = len(self.get_bytes()) - SAMRRespQueryUserInfoHeader._SAMRRespQueryUserInfoHeader__SIZE
- if not var_size > 0:
- raise AssertionError
- return SAMRRespQueryUserInfoHeader._SAMRRespQueryUserInfoHeader__SIZE + var_size
-
-
-
- class SAMRCloseRequestHeader(ImpactPacket.Header):
- OP_NUM = 1
- __SIZE = 20
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRCloseRequestHeader._SAMRCloseRequestHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_header_size(self):
- return SAMRCloseRequestHeader._SAMRCloseRequestHeader__SIZE
-
-
-
- class SAMRRespCloseRequestHeader(ImpactPacket.Header):
- __SIZE = 24
-
- def __init__(self, aBuffer = None):
- ImpactPacket.Header.__init__(self, SAMRRespCloseRequestHeader._SAMRRespCloseRequestHeader__SIZE)
- if aBuffer:
- self.load_header(aBuffer)
-
-
-
- def get_context_handle(self):
- return self.get_bytes().tolist()[:20]
-
-
- def set_context_handle(self, handle):
- if not 20 == len(handle):
- raise AssertionError
- self.get_bytes()[:20] = array.array('B', handle)
-
-
- def get_return_code(self):
- return self.get_long(20, '<')
-
-
- def set_return_code(self, code):
- self.set_long(20, code, '<')
-
-
- def get_header_size(self):
- return SAMRRespCloseRequestHeader._SAMRRespCloseRequestHeader__SIZE
-
-
-
- class DCERPCSamr:
-
- def __init__(self, dcerpc):
- self._dcerpc = dcerpc
-
-
- def connect(self):
- samrcon = SAMRConnectHeader()
- samrcon.set_server('*SMBSERVER')
- self._dcerpc.send(samrcon)
- data = self._dcerpc.recv()
- retVal = SAMRRespConnectHeader(data)
- return retVal
-
-
- def enumdomains(self, context_handle):
- enumdom = SAMREnumDomainsHeader()
- enumdom.set_context_handle(context_handle)
- self._dcerpc.send(enumdom)
- data = self._dcerpc.recv()
- retVal = SAMRRespEnumDomainHeader(data)
- return retVal
-
-
- def lookupdomain(self, context_handle, domain):
- lookupdom = SAMRLookupDomainHeader()
- lookupdom.set_context_handle(context_handle)
- lookupdom.set_domain(domain)
- self._dcerpc.send(lookupdom)
- data = self._dcerpc.recv()
- retVal = SAMRRespLookupDomainHeader(data)
- return retVal
-
-
- def opendomain(self, context_handle, domain_sid):
- opendom = SAMROpenDomainHeader()
- opendom.set_context_handle(context_handle)
- opendom.set_domain_sid(domain_sid)
- self._dcerpc.send(opendom)
- data = self._dcerpc.recv()
- retVal = SAMRRespOpenDomainHeader(data)
- return retVal
-
-
- def enumusers(self, context_handle):
- enumusers = SAMREnumDomainUsersHeader()
- enumusers.set_context_handle(context_handle)
- self._dcerpc.send(enumusers)
- data = self._dcerpc.recv()
- retVal = SAMRRespEnumDomainUsersHeader(data)
- return retVal
-
-
- def openuser(self, context_handle, rid):
- openuser = SAMROpenUserHeader()
- openuser.set_context_handle(context_handle)
- openuser.set_rid(rid)
- self._dcerpc.send(openuser)
- data = self._dcerpc.recv()
- retVal = SAMRRespOpenUserHeader(data)
- return retVal
-
-
- def queryuserinfo(self, context_handle):
- userinfo = SAMRQueryUserInfoHeader()
- userinfo.set_context_handle(context_handle)
- self._dcerpc.send(userinfo)
- data = self._dcerpc.recv()
- retVal = SAMRRespQueryUserInfoHeader(data)
- return retVal
-
-
- def closerequest(self, context_handle):
- closereq = SAMRCloseRequestHeader()
- closereq.set_context_handle(context_handle)
- self._dcerpc.send(closereq)
- data = self._dcerpc.recv()
- retVal = SAMRRespCloseRequestHeader(data)
- return retVal
-
-
-